#define _CRT_SECURE_NO_WARNINGS 1

//7.模拟一
//从键盘输入两个整数[m, n], 输出m和n之间的所有素数。
//输入样例：3，20
//输出样例：3 5 7 11 13 17 19 （输出数据之间用空格间隔）
//
////第一次评测通过的代码（未通关则为最后一次提交评测的代码）
//#include<stdio.h>
//#include<math.h>
//int isPrime(int r)
//{
//	if (r < 2)
//	{
//		return 0;
//	}
//	for (int i = 2;i <= sqrt(r);i++)
//	{
//		if (r % i == 0)
//		{
//			return 0;
//		}
//	}
//	return 1;
//}
//int main()
//{
//	int m = 0, n = 0;
//	scanf("%d%d", &m, &n);
//	for (int i = m;i <= n;i++)
//	{
//		if (isPrime(i))
//		{
//			printf("%d ", i);
//		}
//	}
//	return 0;
//}

//10模拟二
//从键盘输入10个整数存入数组中，从键盘输入一个整数，
//判断从键盘输入的整数是否在数组中，如果找到了，输出该数所在的位置，
//否者提示“not found”。同时按由小到大次序对这批数据进行排序，并输出。
//输入要求：第一行输入10个整数，数据间使用空格间隔
//第二行 输入一个待查找的整数
//输出要求： 第一行输出是否找待查找的数据的信息
//第二行输出排序后的数据，要求数据间用空格间隔
//#include<stdio.h>
//void bubble_sort(int arr[], int sz)//sz是传入数组大小，此题是10，也可以不加
//{
//	for (int i = 0;i < sz - 1;i++)
//	{
//		int flag = 1;//优化（外面标记一下）（可以不写）
//		for (int white = 0;white < sz - 1 - i;white++)
//		{
//			if (arr[white] > arr[white + 1])
//			{
//				int black = arr[white];
//				arr[white] = arr[white + 1];
//				arr[white + 1] = black;
//				flag = 0;//如果内循环没有一次是要交换的，说明全部的数都排好了，此时flag为1，等下会break
//			}
//		}
//		if (flag)
//		{
//			break;
//		}
//	}
//}
//int main()
//{
//	int arr[10] = { 0 };
//	for (int i = 0;i < 10;i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//	int n = 0;
//	scanf("%d", &n);
//	int flag = 0;
//	for (int i = 0;i < 10;i++)
//	{
//		if (arr[i] == n)
//		{
//			printf("%d ", i);
//			flag++;
//		}
//	}
//	if (flag == 0)
//	{
//		printf("not found");
//	}
//	printf("\n");
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	bubble_sort(arr, sz);//可以直接传入10
//	for (int i = 0;i < 10;i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}


//5.模拟三
//从键盘输入一个字符，在给定的字符串中寻找该输入字符，
//若找到打印输出该字符，没有找到给出提示信息“not found”。
//给定的字符串：“the people's republic of china”
//输入样例：p
//输出样例：p
//输入样例：t
//输出样例：not found

//#include<stdio.h>
//#include<string.h>
//int main()
//{
//	char arr[50] = "the people's republic of china";
//	char c = '0';
//	scanf("%c", &c);
//	for (int i = 0;i < strlen(arr);i++)
//	{
//		if (arr[i] == c)
//		{
//			printf("%c", c);
//			return 0;
//		}
//	}
//	printf("not found");
//	return 0;
//}

//1.模拟四
//设某公司的业务员工资的计算方法为：工资＝基本工资＋提成。
//其中，提成的计算方法为：当销售额在10000元以下时，只发基本工资1000元；
//当销售额在10000元以上才可以拿提成。提成的比率为：当销售额在20000元以下时，
//超出10000元的部分可按5% 提成；当销售额在20000元以上50000元以下时，
//超出20000元的部分可按6% 提成；当销售额在50000元以上100000元以下时，
//超出50000元的部分可按7% 提成；当销售额在100000元以上时，
//超出100000元的部分可按8% 提成。输入一个业务员的销售额，计算其应发的工资额。
//输入提示信息："Please input arr: \n"
//输入格式："%d"
//输出格式："%.3f\n"示例：
//Please input arr : 23456↙
//1707.360
//#include <stdio.h>
//int main() 
//{
//    float arr = 0, upper = 0;
//    printf("Please input arr: \n");
//    scanf("%f", &arr);
//    if (arr <= 10000)
//        upper = 1000;
//
//    if (arr > 10000 && arr <= 20000)
//        upper = 1000 + (arr - 10000) * 0.05;
//
//    if (arr > 20000 && arr <= 50000)
//        upper = 1000 + 10000 * 0.05 + (arr - 20000) * 0.06;
//
//    if (arr > 50000 && arr <= 100000)
//        upper = 1000 + 10000 * 0.05 + 30000 * 0.06 + (arr - 50000) * 0.07;
//
//    if (arr > 100000)
//        upper = 1000 + 10000 * 0.05 + 30000 * 0.06 + 50000 * 0.07 + (arr - 100000) * 0.08;
//
//    printf("%.3f\n", upper);
//    return 0;
//}
//1.模拟五
//编写程序，输入一个整数，将它逆序输出。要求定义并调用函数reverse(number),
//它的功能是返回number的逆序数。例如reverse(12345)的返回值是54321.
//#include <stdio.h>
//int reverse(int x)
//{
//	int m = 0;
//	int sum = 0;
//	while (x != 0)
//	{
//		m = x % 10;
//		x = x / 10;
//		sum = (sum * 10) + m;
//	}
//	return sum;
//}
//数组逆序
//void reverse2(int* p, int left, int right)
//{
//	while (left < right)
//	{
//		int black = p[left];
//		p[left] = p[right];
//		p[right] = black;
//		++left;
//		--right;
//	}
//}
//int main()
//{
//	int n;
//	scanf("%d", &n);
//	printf("%d\n", reverse(n));
//	return 0;
//}

//4.模拟六
//某班进行了大学计算机基础考试，现要求的定义函数count帮助任课老师统计优秀率（90分以上为优秀）。
//要求学生成绩使用数组来存储。
//输入样例：78 90 87 65 45 78 23 94 67 77
//输出样例：2
//#include <stdio.h>
//int count(int arr[], int sz)
//{
//    int count = 0;
//    for (int i = 0;i < sz;i++)
//    {
//        if (arr[i] >= 90)
//        {
//            count++;
//        }
//    }
//    return count;
//}
//int main()
//{
//    int arr[10] = { 0 };
//    for (int i = 0;i < 10;i++)
//    {
//        scanf("%d", &arr[i]);
//    }
//    printf("%d", count(arr, 10));
//    return 0;
//}

//2.模拟七
//”20211202“是一个特殊的日子，是完全对称日。所谓完全对称日即正读和反读得到的字符串是相同的，
//实质就是一个回文词。英文中有很多的回文词，回文词的拼法十分有趣，无论是从前往后拼读，
//还是从后往前拼读，他们的拼法和词义都不变。例如：dad（爸爸），mum（妈妈），noon（中午），
// eve（前夕），eye（眼睛），pop（流行），deed（行为），level（水平）等。
// 现在请你编程输入一个字符串，判断它是否是回文。
//提示：
//（1）设置两个指针pStart和pEnd，让pStart指向字符串首部，让pEnd指向字符串尾部。
//或者设置两个循环变量i和j，i指向首字符，j指向结束符。
//（2）利用循环从字符串两边对指针所指字符进行比较，当对应的两字符相等且两指针未超越对方时，
//使指针pStart向前移动一个字符位置（加1），使指针pEnd向后移动一个字符位置（减1），
//一旦发现两字符不等或两指针已互相超越（不可能是回文），则立即停止循环。
//（3）根据退出循环时两指针的位置，判断字符串是否为回文。
//输入样例：ABCCBA
//输出样例：YES!
//输入样例：student
//输出样例：NO!
//#include<stdio.h>
//#include<string.h>
//int main()
//{
//    char str[100] = { 0 };
//    gets(str);
//    char* pStart = str, * pEed = &str[strlen(str) - 1];
//    while (pStart < pEed)
//    {
//        if (*pStart != *pEed)
//        {
//            break;
//        }
//        pStart++;
//        pEed--;
//    }
//    if (pStart >= pEed)
//    {
//        printf("yes");
//    }
//    else
//    {
//        printf("no");
//    }
//    return 0;
//}
// 法二：
//#include<stdio.h>
//#include<string.h>
//int main()
//{
//    char arr[100] = { 0 }, arr_tmp[100] = { 0 };//把arr反过来拷贝
//    gets(arr);
//    int len = strlen(arr);
//    int black = len - 1;
//    for (int i = 0;i < len;i++)
//    {
//        arr_tmp[i] = arr[black--];
//    }
//    if (strcmp(arr, arr_tmp) == 0)
//    {
//        printf("是回文数");
//    }
//    else
//    {
//        printf("不是回文数");
//    }
//    return 0;
//}
//strcmp(str1,str2)
//若str1=str2，则返回零；
//若str1<str2，则返回负数；若str1>str2，则返回正数。

//9.模拟八
//从3个红球，5个白球，6个黑球中任意取出8个作为一组。在每组中可以没有黑球，
//但必须要有红球和白球。编程实现复合要求的组合数。
//#include <stdio.h>	 	   
//int main()
//{
//    int sum = 0;
//    for (int red = 1; red <= 3; red++)
//    {
//        for (int white = 1; white <= 5; white++)
//        {
//            for (int black = 0; black <= 6; black++)//可以没有黑球，从0开始
//            {
//                if (red + white + black == 8)
//                {
//                    printf("red:%d white:%d black:%d\n", red, white, black);
//                    sum++;
//                }
//            }
//        }
//    }
//    printf("sum = %d", sum);
//    return 0;
//}
//
//8.模拟九
//编程实现判断用户在某购物网站注册时输入的密码是否合法，要求密码长度不能超过20，
//且密码是混合字符，必须包含英文大写字母，英文小写字母和数字字符三种字符。
//如果用户输入的注册密码复合要求，输出“yes ”否者输出 "no"
//#include <stdio.h>
//#include <string.h>
//int main()
//{
//    char arr[100];
//    gets(arr);
//    int lower = 0, upper = 0, digit = 0;
//    int len = strlen(arr);
//    if (len <= 20)
//    {
//        for (int i = 0;i < len;i++)
//        {
//            if (arr[i] >= 'a' && arr[i] <= 'z')
//            {
//                lower++;
//            }
//            if (arr[i] >= 'A' && arr[i] <= 'Z')
//            {
//                upper++;
//            }
//            if (arr[i] >= '0' && arr[i] <= '9')
//            {
//                digit++;
//            }
//        }
//    }
//    //如果不能是混合字符就加上k+upper+digit==i
//    if (lower != 0 && upper != 0 && digit != 0)
//    {
//        printf("yes");
//    }
//    else
//    {
//        printf("no");
//    }
//    return 0;
//}

//3.模拟十
//应用结构体类型，编程输入4名学生的姓名和高等数学、
//大学英语、模拟电路三门课程的成绩，输出平均分最高的学生的姓名。
//输入样例:
//zhangsan  80 90 100
//lisi 95 85 98
//wangwu 95 85 95
//zhaoliu 100 80 88
//输出样例:
//lisi

//#include<stdio.h>
//struct student
//{
//	char name[20];
//	float score[3];
//	float aver;
//};
//int main()
//{
//	struct student s[4] = { 0 };
//	for (int i = 0;i < 4;i++)
//	{
//		scanf("%s%f%f%f", &s[i].name, &s[i].score[0], &s[i].score[1], &s[i].score[2]);
//		s[i].aver = (s[i].score[0] + s[i].score[1] + s[i].score[2]) / 3;
//	}
//	float max = -1;
//	int i = 0, tmp = 0;
//	for (i = 0;i < 4;i++)
//	{
//		if (s[i].aver > max)
//		{
//			max = s[i].aver;
//			tmp = i;
//		}
//	}
//	printf("%s", s[tmp].name);
//	return 0;
//}


//#include <stdio.h>
//#include <string.h>
//
//int main()
//{
//    float money = 0, sum = 0;//money是购物金额，sum是实付金额
//    scanf("%f%f", &money, &sum);
//    float s = 0, putm = 0, ret = 0;//s是折扣率，putm是打折后金额,ret是找零
//    if (money < 500)
//    {
//        s = 1.00;
//    }
//    if (money >= 500 && money < 1000)
//    {
//        s = 0.95;
//    }
//    if (money >= 1000 && money < 2000)
//    {
//        s = 0.90;
//    }
//    if (money >= 2000 && money < 3000)
//    {
//        s = 0.85;
//    }
//    if (money >= 3000)
//    {
//        s = 0.80;
//    }
//    putm = money * s;
//    ret = sum - putm;
//    printf("%.0f", s * 100);
//    putchar('%');
//    printf("\n");
//    printf("%.2f\n", putm);
//    printf("%.2f", ret);
//    return 0;
//}


//一个大于1的自然数p，除了1和本身p以外，不能被其他自然数整除，称p为素数(又称质数，prime number)。已知素数有无限多个，但是到目前为止，人们未找到一个公式可求出所有质数。2016年1月，发现世界上迄今为止最大的质数，长达2233万位，如果用普通字号将它打印出来长度将超过65公里。
//编程实现，输入一个大于1的正整数N，输出其是否为素数，如果是输出YES，否则输出NO。
//输入样例 :
//15
//输出样例 :
//	NO
//	输入样例 :
//53
//输出样例 :
//	YES
// 

//应用结构体类型，编程输入n个学生的姓名和高级语言、数据结构、算法分析三门课程的成绩，输出总分第一名的学生姓名。
//输入样例 :
//Madaha  80 90 100
//Jibuzhu 95 85 98
//Burenzhen 95 85 90
//Xueba 100 80 98
//输出样例 :
//	Jibuzhu 278
//#include <stdio.h>
//#define N 4
//
//struct student 
//{
//	char name[20];
//	float score[3];
//	float sum;
//};
//
//int main()
//{
//	struct student s[N];
//	for (int i = 0; i < N; i++) 
//	{
//		scanf("%s%f%f%f", &s[i].name, &s[i].score[0], &s[i].score[1], &s[i].score[2]);
//		s[i].sum = s[i].score[0] + s[i].score[1] + s[i].score[2];
//	}
//	int tmp = 0;
//	float max = -1;
//	for (int i = 0; i < N; i++)
//	{
//		if (s[i].sum > max)
// {
//			max = s[i].sum;
//			tmp = i;
//		}
//	}
//	printf("%s %.0f", s[tmp].name, s[tmp].sum);
//	return 0;
//}

//学生成绩系统中常常需要统计各分数段的学生占比，请编写一个名为CountRate函数计算优秀学生的比例，其中成绩的分值从0至100，优秀成绩是指90分以上(含90分)，函数有两个形式参数:一个用于接收学生成绩的数组，另一个用于接收数组的长度，并在main函数调用。
//输入样例：80.7 90  68.5 90.8 100 98.6 75.8 60 100 69 92（成绩）
//11 （数组长度）
//输出样例：54.55 %
//#include <stdio.h>
//
//float CountRate(float arr[], int sz)
//{
//	float count = 0;
//	for (int i = 0; i < sz; i++) 
//	{
//		if (arr[i] >= 90) 
//		{
//			count++;
//		}
//	}
//	float ret = (count / sz) * 100;
//	return ret;
//}
//
//int main()
//{
//    float arr[11] = { 0 };
//    for (int i = 0; i < 11; i++)
//    {
//        scanf("%f", &arr[i]);
//    }
//    int sz = sizeof(arr) / sizeof(arr[0]);//这题sz可以直接等于11
//    printf("%.2f", CountRate(arr, sz));
//    putchar('%');
//    return 0;
//}

//Median（中位数） is an important concept in statistics（统计学）.It refers to the average value of the middle two numbers in a series of numbers arranged from small to large.Of course, if the number of data is odd（奇数）, the middle number is the median.In order to evaluate（评估） students' course learning, assume that there are 10 students whose grades are 80.7, 90, 68.5, 90.8, 100, 98.6, 75.8, 60, 100, 69. Please define an array to hold(保存) these scores. And sort them in ascending order（升序排序）, and then calculate the median of the array.
//
//Output format： % .2f

//#include <stdio.h>
//#include<stdlib.h>
//
////int cmp(const void* p1, const void* p2)
////{
////    return *(float*)p1 > *(float*)p2 ? 1 : 0;
////}
//
//void bubble_sort(float arr[], int sz)
//{
//    for (int i = 0;i < sz - 1;i++)
//    {
//        int flag = 1;
//        for (int j = 0;j < sz - 1 - i;j++)
//        {
//            if (arr[j] > arr[j + 1])
//            {
//                float tmp = arr[j];
//                arr[j] = arr[j + 1];
//                arr[j + 1] = tmp;
//                flag = 0;
//            }
//        }
//        if (flag)
//        {
//            break;
//        }
//    }
//}
//
//int main() 
//{
//    float arr[10] = { 0 };
//    for (int i = 0; i < 10; i++) 
//    {
//        scanf("%f", &arr[i]);
//    }
//    int sz = sizeof(arr) / sizeof(arr[0]);//这些题sz直接等于10或者其他具体的数就行
//    bubble_sort(arr, sz);
//    //for (int i = 0; i < 10; i++)//考试时可以把这段注释放开看看排序排序对不对
//    //{
//    //    printf("%.2f ", arr[i]);
//    //}
//    //printf("\n");
//    printf("%.2f", (arr[4] + arr[5]) / 2.0);
//
//    return 0;
//
//    //qsort(arr,sz,sizeof(float),cmp);
//    //for (int i = 0; i < 10; i++)
//    //{
//    //    printf("%.2f ",arr[i]);
//    //}
//    //printf("\n");
//    //if (sz % 2 == 0)
//    //{
//    //    printf("%.2f", (arr[4] + arr[5]) / 2.0);
//    //}
//    //else
//    //{
//    //    printf("%.2f", arr[sz / 2]);
//    //}
//}

//Pointer is an important means to improve the running efficiency of programs（程序运行效率）, especially for the operation of arrays with large amounts of data.During system registration（系统注册）, the system generally requires to input mixed characters（混合字符） to improve the security of the system（系统安全性）.Assume that the valid password must contain digits, uppercase letters, and lowercase letters.Define a variable that can save the password(the password length does not exceed 20)(密码长度不超过20), and use the pointer to determine whether the password is valid.
//input sample：Song123wjk123
//output sample：valid
//input sample：songwjk123123
//output sample：invalid

//#include <stdio.h>
//#include <string.h>
//int main()
//{
//    char array[100] = { 0 };
//    gets(array);
//    int sz = strlen(array);
//    int digits = 0, uppercase = 0, lowercase = 0;
//    char* arr = array;
//    if (sz <= 20)
//    {
//        for (int i = 0;i < sz;i++)
//        {
//            if (arr[i] >= 'a' && arr[i] <= 'z')
//            {
//                lowercase++;
//            }
//            if (arr[i] >= 'A' && arr[i] <= 'Z')
//            {
//                uppercase++;
//            }
//            if (arr[i] >= '0' && arr[i] <= '9')
//            {
//                digits++;
//            }
//        }
//    }
//    if (digits != 0 && uppercase != 0 && lowercase != 0 /*&& digits+uppercase+lowercase==sz*/)
//    {
//        printf("valid\n");
//    }
//    else
//    {
//        printf("invalid\n");
//    }
//    return 0;
//}

//#include <stdio.h>
//#include <string.h>
//int main()
//{
//    char array[100] = { 0 };
//    gets(array);
//    int sz = strlen(array);
//    int digits = 0, uppercase = 0, lowercase = 0;
//    char* arr = array;
//    if (sz <= 20)
//    {
//        for (int i = 0;i < sz;i++)
//        {
//            if (arr[i] >= 'a' && arr[i] <= 'z')
//            {
//                lowercase++;
//            }
//            if (arr[i] >= 'A' && arr[i] <= 'Z')
//            {
//                uppercase++;
//            }
//            if (arr[i] >= '0' && arr[i] <= '9')
//            {
//                digits++;
//            }
//        }
//    }
//    if (digits != 0 && uppercase != 0 && lowercase != 0 /*&& digits+uppercase+lowercase==sz*/)
//    {
//        printf("valid\n");
//    }
//    else
//    {
//        printf("invalid\n");
//    }
//    return 0;
//}

#include <stdio.h>
#include <stdlib.h>

int main()
{
    // calloc
    int* p = (int*)calloc(10, sizeof(int)); // 开辟10个大小为int的空间，40
    if (p == NULL)
    {
        perror("main");
        return 0;
    }
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        printf("%d ", *(p + i)); //这里打印了十个0，换成malloc开辟的就打印十个一样的随机值
    }
    free(p);
    p = NULL;
    return 0;
}